package org.example.kaptcha.controller;

import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.Date;

/**
 * Created with IntelliJ IDEA.
 * Description:做渐进主义的改良派,不做完没注意的速成派
 * User: XALEXC
 * Date: 2024-12-09
 * Time: 22:09
 */
@RequestMapping("/admin")
@RestController
public class CaptchaController {

    private static final String SESSION_KEY="ADMIN_KAPTCHA_SESSION_KEY";
    // 验证码的有效日期
    private static final Long SESSION_TIMEOUT=60*1000L;
    private static final String SESSION_DATE="ADMIN_KAPTCHA_SESSION_DATE";
    // 验证成功: true
    // 验证失败: false

    /**
     *  1.从session中获取到生成的验证码
     *  2.比对前端传递的验证码和session中存储的是否相同
     */
    @RequestMapping("/check")
    public boolean check(String captcha, HttpSession session){
        if (!StringUtils.hasLength(captcha)){
            return false;
        }
        // 如果代码走到这里就需要进行比较
        // 从Session中获取验证码
        String saveSessionKaptcha=(String)session.getAttribute(SESSION_KEY);
        Date saveDate=(Date)session.getAttribute(SESSION_DATE);
        // 比对验证码
        if (captcha.equals(saveSessionKaptcha)){
            if(saveDate==null||System.currentTimeMillis()-saveDate.getTime()<SESSION_TIMEOUT){
                return true;
            }
        }
        return false;

    }
}
